
import GameInputEvent from "./GameInputEvent";
import { InputKeyCode } from "./InputConfig";
interface BaseListener {

}
//单按键事件监听者
export interface KeyEventListener extends BaseListener {
    /**
     * 是否阻挡事件穿透
    */
    isBlockInput(): boolean;
    /**
     * 纯键盘按键按下回调
     * @param keyCode 按键键值
    */
    onKeyBoardPress(keyCode: InputKeyCode, event?: GameInputEvent): void;
    /**
     * 纯键盘按键抬起回调
     * @param keyCode 按键键值
    */
    onKeyBoardRelease(keyCode: InputKeyCode, event?: GameInputEvent): void;

    get isValid():boolean;
}

/**
 * 鼠标事件接口
*/
export interface MouseEventListener extends BaseListener {
    /**
     * 是否阻挡事件穿透
    */
    isBlockMouse(): boolean;
    /**
     * 鼠标移动回调
     * @param pos 当前鼠标坐标
    */
    onMouseMove(keyCode: InputKeyCode, event?: GameInputEvent): void;

    onMouseDown(keyCode: InputKeyCode, event?: GameInputEvent): void;

    onMouseUp(keyCode: InputKeyCode, event?: GameInputEvent): void;

}
//多按键事件监听者
export interface MultiKeyListener extends BaseListener {
    /**
     * 是否阻挡事件穿透
    */
    isBlockMultiInput(): boolean;
    /**
     * 混合按键按下回调
     * @param event 回调参数，含按键信息
    */
    onMultiKeyPress(event: GameInputEvent): void;
    /**
     * 混合按键抬起回调
     * @param event 回调参数，含按键信息
    */
    onMultiKeyRelease(event: GameInputEvent): void;
}

//遥感事件监听者
export interface RockerEventListener extends BaseListener {
    /**
     * 是否阻挡事件穿透
    */
    isBlockRocker(): boolean;
    /**
     * 摇杆事件
     * @param x -1 到 1
     * @param y -1 到 1
     * 每个方向都是-1到1之间的实数，-1是左/下，1是右/上
     */
    onRockerEvent(keyCode: InputKeyCode, event: GameInputEvent): void
}

/**
 * 模式切换事件接口
*/
export interface CtrlModeListener {
    /**
     * 操作模式切换回调
     * @param mode 新的操作模式
    */
    onChangeMode(mode: string): void;
}

